<!DOCTYPE html>
<html lang="en-US">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>简介 | Teng&#39;s blog</title>
    <meta name="generator" content="VuePress 1.9.7">
    <link rel="icon" href="/logo/favicon.ico">
    <meta name="description" content="">
    <meta name="keywords" content="大数据,java,h5,前端,人工智能,深度学习,go">
    <meta name="theme-color" content="#3eaf7c">
    
    <link rel="preload" href="/assets/css/0.styles.c17b3ac5.css" as="style"><link rel="preload" href="/assets/js/app.ab6a7ec7.js" as="script"><link rel="preload" href="/assets/js/2.bc9beebf.js" as="script"><link rel="preload" href="/assets/js/47.59030139.js" as="script"><link rel="prefetch" href="/assets/js/10.829fbe09.js"><link rel="prefetch" href="/assets/js/100.21819a92.js"><link rel="prefetch" href="/assets/js/101.cba9a2fb.js"><link rel="prefetch" href="/assets/js/102.866a5b15.js"><link rel="prefetch" href="/assets/js/103.fdb7598a.js"><link rel="prefetch" href="/assets/js/104.75b80350.js"><link rel="prefetch" href="/assets/js/105.3030b5b8.js"><link rel="prefetch" href="/assets/js/106.11a5a8f2.js"><link rel="prefetch" href="/assets/js/107.232bdd92.js"><link rel="prefetch" href="/assets/js/108.a619d3d9.js"><link rel="prefetch" href="/assets/js/109.d31480d9.js"><link rel="prefetch" href="/assets/js/11.18a3d2d0.js"><link rel="prefetch" href="/assets/js/110.7b7051ad.js"><link rel="prefetch" href="/assets/js/111.6976153b.js"><link rel="prefetch" href="/assets/js/112.935a63bd.js"><link rel="prefetch" href="/assets/js/113.77296509.js"><link rel="prefetch" href="/assets/js/114.3ab3be4a.js"><link rel="prefetch" href="/assets/js/115.9b0dac10.js"><link rel="prefetch" href="/assets/js/116.55bc2cd6.js"><link rel="prefetch" href="/assets/js/117.75bd6d05.js"><link rel="prefetch" href="/assets/js/118.0dae142d.js"><link rel="prefetch" href="/assets/js/119.b1a2888c.js"><link rel="prefetch" href="/assets/js/12.81e292a4.js"><link rel="prefetch" href="/assets/js/120.6a3fd99f.js"><link rel="prefetch" href="/assets/js/121.ea1e1714.js"><link rel="prefetch" href="/assets/js/122.125ebe03.js"><link rel="prefetch" href="/assets/js/123.ec5bcef7.js"><link rel="prefetch" href="/assets/js/124.f346a2dc.js"><link rel="prefetch" href="/assets/js/125.11061d5a.js"><link rel="prefetch" href="/assets/js/126.7f8bc26b.js"><link rel="prefetch" href="/assets/js/127.26df99b6.js"><link rel="prefetch" href="/assets/js/128.0d4aae4f.js"><link rel="prefetch" href="/assets/js/129.ec01b50e.js"><link rel="prefetch" href="/assets/js/13.89c37359.js"><link rel="prefetch" href="/assets/js/130.9e570618.js"><link rel="prefetch" href="/assets/js/131.ffaed293.js"><link rel="prefetch" href="/assets/js/132.6ef77a2c.js"><link rel="prefetch" href="/assets/js/133.893078b6.js"><link rel="prefetch" href="/assets/js/134.a5229ebf.js"><link rel="prefetch" href="/assets/js/135.e1015261.js"><link rel="prefetch" href="/assets/js/136.655ac222.js"><link rel="prefetch" href="/assets/js/137.4c18a7dc.js"><link rel="prefetch" href="/assets/js/138.17cf92aa.js"><link rel="prefetch" href="/assets/js/139.7e23a82f.js"><link rel="prefetch" href="/assets/js/14.5a11397f.js"><link rel="prefetch" href="/assets/js/140.570f33f7.js"><link rel="prefetch" href="/assets/js/141.eb538cc8.js"><link rel="prefetch" href="/assets/js/142.2f38d42f.js"><link rel="prefetch" href="/assets/js/143.a32de735.js"><link rel="prefetch" href="/assets/js/144.76a63ee6.js"><link rel="prefetch" href="/assets/js/145.42483d13.js"><link rel="prefetch" href="/assets/js/146.068119e8.js"><link rel="prefetch" href="/assets/js/147.64de6f65.js"><link rel="prefetch" href="/assets/js/148.5709a561.js"><link rel="prefetch" href="/assets/js/149.9373f1d3.js"><link rel="prefetch" href="/assets/js/15.f98080cd.js"><link rel="prefetch" href="/assets/js/150.85328596.js"><link rel="prefetch" href="/assets/js/151.8179d926.js"><link rel="prefetch" href="/assets/js/152.357ef7ac.js"><link rel="prefetch" href="/assets/js/153.a7f37700.js"><link rel="prefetch" href="/assets/js/154.259e0731.js"><link rel="prefetch" href="/assets/js/155.609478f3.js"><link rel="prefetch" href="/assets/js/156.c02413b4.js"><link rel="prefetch" href="/assets/js/157.4225246d.js"><link rel="prefetch" href="/assets/js/158.90aa3193.js"><link rel="prefetch" href="/assets/js/159.48a36d7f.js"><link rel="prefetch" href="/assets/js/16.c2c39a12.js"><link rel="prefetch" href="/assets/js/160.1483c525.js"><link rel="prefetch" href="/assets/js/161.935da955.js"><link rel="prefetch" href="/assets/js/162.623fec51.js"><link rel="prefetch" href="/assets/js/163.9b588340.js"><link rel="prefetch" href="/assets/js/164.30ec5aba.js"><link rel="prefetch" href="/assets/js/165.189a8317.js"><link rel="prefetch" href="/assets/js/166.5af6c2ec.js"><link rel="prefetch" href="/assets/js/167.9dff1ac7.js"><link rel="prefetch" href="/assets/js/168.622f7001.js"><link rel="prefetch" href="/assets/js/169.2e7169b6.js"><link rel="prefetch" href="/assets/js/17.b69c805b.js"><link rel="prefetch" href="/assets/js/170.722cbe91.js"><link rel="prefetch" href="/assets/js/171.bc79c387.js"><link rel="prefetch" href="/assets/js/172.ee6817b8.js"><link rel="prefetch" href="/assets/js/173.b35d740e.js"><link rel="prefetch" href="/assets/js/174.5c6e7df5.js"><link rel="prefetch" href="/assets/js/175.d4a5903b.js"><link rel="prefetch" href="/assets/js/176.7be8b3ab.js"><link rel="prefetch" href="/assets/js/177.21a314f9.js"><link rel="prefetch" href="/assets/js/178.7c287ca3.js"><link rel="prefetch" href="/assets/js/179.b4682242.js"><link rel="prefetch" href="/assets/js/18.8b504010.js"><link rel="prefetch" href="/assets/js/180.0098b166.js"><link rel="prefetch" href="/assets/js/181.1ade00c6.js"><link rel="prefetch" href="/assets/js/182.2cdebd59.js"><link rel="prefetch" href="/assets/js/183.019718a7.js"><link rel="prefetch" href="/assets/js/184.d4ab9703.js"><link rel="prefetch" href="/assets/js/185.50d60e28.js"><link rel="prefetch" href="/assets/js/186.3a98e144.js"><link rel="prefetch" href="/assets/js/187.9ed4524b.js"><link rel="prefetch" href="/assets/js/188.c3a8a353.js"><link rel="prefetch" href="/assets/js/189.b949cdaa.js"><link rel="prefetch" href="/assets/js/19.6860ea74.js"><link rel="prefetch" href="/assets/js/190.7a54fb5e.js"><link rel="prefetch" href="/assets/js/191.804d06a5.js"><link rel="prefetch" href="/assets/js/192.c729ba9b.js"><link rel="prefetch" href="/assets/js/193.e8d492ad.js"><link rel="prefetch" href="/assets/js/194.49b4668e.js"><link rel="prefetch" href="/assets/js/195.e4508c24.js"><link rel="prefetch" href="/assets/js/196.538420c6.js"><link rel="prefetch" href="/assets/js/197.56fda656.js"><link rel="prefetch" href="/assets/js/198.75e420ad.js"><link rel="prefetch" href="/assets/js/199.67784aef.js"><link rel="prefetch" href="/assets/js/20.82f2e898.js"><link rel="prefetch" href="/assets/js/200.b32cd750.js"><link rel="prefetch" href="/assets/js/201.594db75b.js"><link rel="prefetch" href="/assets/js/202.70b380ec.js"><link rel="prefetch" href="/assets/js/203.0de30338.js"><link rel="prefetch" href="/assets/js/204.360c28c7.js"><link rel="prefetch" href="/assets/js/205.5b4b553b.js"><link rel="prefetch" href="/assets/js/206.6bd13fc8.js"><link rel="prefetch" href="/assets/js/207.875be01b.js"><link rel="prefetch" href="/assets/js/208.00694e2b.js"><link rel="prefetch" href="/assets/js/209.1fa15603.js"><link rel="prefetch" href="/assets/js/21.3f050c1d.js"><link rel="prefetch" href="/assets/js/210.f11e4fe3.js"><link rel="prefetch" href="/assets/js/211.a9beca8a.js"><link rel="prefetch" href="/assets/js/212.2fb3a3b1.js"><link rel="prefetch" href="/assets/js/213.c2fb7dcf.js"><link rel="prefetch" href="/assets/js/214.7613f2f7.js"><link rel="prefetch" href="/assets/js/215.ac00cd4b.js"><link rel="prefetch" href="/assets/js/216.926eb535.js"><link rel="prefetch" href="/assets/js/217.e03af99a.js"><link rel="prefetch" href="/assets/js/218.0212a1a9.js"><link rel="prefetch" href="/assets/js/219.318a1817.js"><link rel="prefetch" href="/assets/js/22.f2a18e55.js"><link rel="prefetch" href="/assets/js/220.34f368ec.js"><link rel="prefetch" href="/assets/js/221.1d325330.js"><link rel="prefetch" href="/assets/js/222.f8ac9e1e.js"><link rel="prefetch" href="/assets/js/223.1d081b10.js"><link rel="prefetch" href="/assets/js/224.d4a3c833.js"><link rel="prefetch" href="/assets/js/225.86046773.js"><link rel="prefetch" href="/assets/js/226.ee01e5ed.js"><link rel="prefetch" href="/assets/js/227.cc700349.js"><link rel="prefetch" href="/assets/js/228.121d2708.js"><link rel="prefetch" href="/assets/js/229.411a1a59.js"><link rel="prefetch" href="/assets/js/23.8416a606.js"><link rel="prefetch" href="/assets/js/230.ce1cd57d.js"><link rel="prefetch" href="/assets/js/231.9e415c00.js"><link rel="prefetch" href="/assets/js/232.af1434b0.js"><link rel="prefetch" href="/assets/js/233.aedf0a69.js"><link rel="prefetch" href="/assets/js/234.7343179f.js"><link rel="prefetch" href="/assets/js/235.3ea94188.js"><link rel="prefetch" href="/assets/js/236.e632719a.js"><link rel="prefetch" href="/assets/js/237.34a70a59.js"><link rel="prefetch" href="/assets/js/238.9582b4be.js"><link rel="prefetch" href="/assets/js/239.2a1f2f8d.js"><link rel="prefetch" href="/assets/js/24.73629fb4.js"><link rel="prefetch" href="/assets/js/240.e0563eb9.js"><link rel="prefetch" href="/assets/js/241.7a2b4d6e.js"><link rel="prefetch" href="/assets/js/242.f9f59053.js"><link rel="prefetch" href="/assets/js/243.95904034.js"><link rel="prefetch" href="/assets/js/244.0c91ecaa.js"><link rel="prefetch" href="/assets/js/245.58988353.js"><link rel="prefetch" href="/assets/js/246.73360878.js"><link rel="prefetch" href="/assets/js/247.3f36cb13.js"><link rel="prefetch" href="/assets/js/248.9bca99ac.js"><link rel="prefetch" href="/assets/js/249.e78a3dbb.js"><link rel="prefetch" href="/assets/js/25.f62ba06b.js"><link rel="prefetch" href="/assets/js/250.5999a7b3.js"><link rel="prefetch" href="/assets/js/251.5204362e.js"><link rel="prefetch" href="/assets/js/252.a731f0e2.js"><link rel="prefetch" href="/assets/js/253.ef15afff.js"><link rel="prefetch" href="/assets/js/254.8e0d8aa8.js"><link rel="prefetch" href="/assets/js/255.53408731.js"><link rel="prefetch" href="/assets/js/256.3d08ae8f.js"><link rel="prefetch" href="/assets/js/257.1de6306c.js"><link rel="prefetch" href="/assets/js/258.b3ec2e6c.js"><link rel="prefetch" href="/assets/js/259.40e6c088.js"><link rel="prefetch" href="/assets/js/26.ed3d7d52.js"><link rel="prefetch" href="/assets/js/260.05ea317d.js"><link rel="prefetch" href="/assets/js/261.048af235.js"><link rel="prefetch" href="/assets/js/262.905ce2e2.js"><link rel="prefetch" href="/assets/js/263.8ace396b.js"><link rel="prefetch" href="/assets/js/264.10841fe2.js"><link rel="prefetch" href="/assets/js/265.f94f5548.js"><link rel="prefetch" href="/assets/js/266.bf7b6e06.js"><link rel="prefetch" href="/assets/js/267.4c03cbf4.js"><link rel="prefetch" href="/assets/js/268.1886e607.js"><link rel="prefetch" href="/assets/js/269.9dfca98b.js"><link rel="prefetch" href="/assets/js/27.18a2fe1c.js"><link rel="prefetch" href="/assets/js/270.a0ebdd62.js"><link rel="prefetch" href="/assets/js/271.cb9ce68b.js"><link rel="prefetch" href="/assets/js/272.99ea7c05.js"><link rel="prefetch" href="/assets/js/273.7f5c9d16.js"><link rel="prefetch" href="/assets/js/274.1ca50474.js"><link rel="prefetch" href="/assets/js/275.e0a79a93.js"><link rel="prefetch" href="/assets/js/276.5e9f441d.js"><link rel="prefetch" href="/assets/js/277.31f82a4b.js"><link rel="prefetch" href="/assets/js/278.2df5557a.js"><link rel="prefetch" href="/assets/js/279.6caef400.js"><link rel="prefetch" href="/assets/js/28.30687ae2.js"><link rel="prefetch" href="/assets/js/280.07da039a.js"><link rel="prefetch" href="/assets/js/281.81b66752.js"><link rel="prefetch" href="/assets/js/282.a362880b.js"><link rel="prefetch" href="/assets/js/283.37de8db2.js"><link rel="prefetch" href="/assets/js/284.31a9bcd5.js"><link rel="prefetch" href="/assets/js/285.e1ed9d70.js"><link rel="prefetch" href="/assets/js/286.5cd73851.js"><link rel="prefetch" href="/assets/js/287.b598b99a.js"><link rel="prefetch" href="/assets/js/288.a2580005.js"><link rel="prefetch" href="/assets/js/289.83413eb3.js"><link rel="prefetch" href="/assets/js/29.8f48fd0e.js"><link rel="prefetch" href="/assets/js/290.405974a0.js"><link rel="prefetch" href="/assets/js/291.f762f6f9.js"><link rel="prefetch" href="/assets/js/292.f5851afc.js"><link rel="prefetch" href="/assets/js/293.8e7d9ffa.js"><link rel="prefetch" href="/assets/js/294.3694f780.js"><link rel="prefetch" href="/assets/js/295.84d9cd4c.js"><link rel="prefetch" href="/assets/js/296.0a6bbe5d.js"><link rel="prefetch" href="/assets/js/297.195f8ede.js"><link rel="prefetch" href="/assets/js/3.7494bd83.js"><link rel="prefetch" href="/assets/js/30.5f000d59.js"><link rel="prefetch" href="/assets/js/31.2f3aea00.js"><link rel="prefetch" href="/assets/js/32.78912726.js"><link rel="prefetch" href="/assets/js/33.4f600444.js"><link rel="prefetch" href="/assets/js/34.1ec8259c.js"><link rel="prefetch" href="/assets/js/35.bc414639.js"><link rel="prefetch" href="/assets/js/36.b0c05f62.js"><link rel="prefetch" href="/assets/js/37.7e626d70.js"><link rel="prefetch" href="/assets/js/38.bb3a6a22.js"><link rel="prefetch" href="/assets/js/39.3d17059f.js"><link rel="prefetch" href="/assets/js/4.ff6020d1.js"><link rel="prefetch" href="/assets/js/40.2023aaeb.js"><link rel="prefetch" href="/assets/js/41.64452f22.js"><link rel="prefetch" href="/assets/js/42.32522c9c.js"><link rel="prefetch" href="/assets/js/43.ae24bdff.js"><link rel="prefetch" href="/assets/js/44.3acc6c82.js"><link rel="prefetch" href="/assets/js/45.2cec263d.js"><link rel="prefetch" href="/assets/js/46.ceacfcd8.js"><link rel="prefetch" href="/assets/js/48.fa5e3c59.js"><link rel="prefetch" href="/assets/js/49.2054398b.js"><link rel="prefetch" href="/assets/js/5.f2ade644.js"><link rel="prefetch" href="/assets/js/50.47a76469.js"><link rel="prefetch" href="/assets/js/51.c36ce30b.js"><link rel="prefetch" href="/assets/js/52.72ce6650.js"><link rel="prefetch" href="/assets/js/53.9dbe65dd.js"><link rel="prefetch" href="/assets/js/54.b571c195.js"><link rel="prefetch" href="/assets/js/55.3502ffd5.js"><link rel="prefetch" href="/assets/js/56.790119c4.js"><link rel="prefetch" href="/assets/js/57.aae4081b.js"><link rel="prefetch" href="/assets/js/58.e54d1920.js"><link rel="prefetch" href="/assets/js/59.6eaa8c48.js"><link rel="prefetch" href="/assets/js/6.04d544f0.js"><link rel="prefetch" href="/assets/js/60.7b2d3e47.js"><link rel="prefetch" href="/assets/js/61.093542b8.js"><link rel="prefetch" href="/assets/js/62.d0af83fd.js"><link rel="prefetch" href="/assets/js/63.b57f13fb.js"><link rel="prefetch" href="/assets/js/64.acbb2295.js"><link rel="prefetch" href="/assets/js/65.87d05864.js"><link rel="prefetch" href="/assets/js/66.773a0404.js"><link rel="prefetch" href="/assets/js/67.c66984d0.js"><link rel="prefetch" href="/assets/js/68.77bfcb54.js"><link rel="prefetch" href="/assets/js/69.7e3d1cc4.js"><link rel="prefetch" href="/assets/js/7.bc46b052.js"><link rel="prefetch" href="/assets/js/70.dbd5eb9b.js"><link rel="prefetch" href="/assets/js/71.109923c3.js"><link rel="prefetch" href="/assets/js/72.c92d7f25.js"><link rel="prefetch" href="/assets/js/73.a8ef2055.js"><link rel="prefetch" href="/assets/js/74.79119a72.js"><link rel="prefetch" href="/assets/js/75.009bcb5e.js"><link rel="prefetch" href="/assets/js/76.cba94ffd.js"><link rel="prefetch" href="/assets/js/77.caa07e47.js"><link rel="prefetch" href="/assets/js/78.fef64e9e.js"><link rel="prefetch" href="/assets/js/79.72d6eb81.js"><link rel="prefetch" href="/assets/js/8.8cf6541b.js"><link rel="prefetch" href="/assets/js/80.9370a1bd.js"><link rel="prefetch" href="/assets/js/81.f53b6c0a.js"><link rel="prefetch" href="/assets/js/82.01861305.js"><link rel="prefetch" href="/assets/js/83.4d69c6c5.js"><link rel="prefetch" href="/assets/js/84.ea80ae96.js"><link rel="prefetch" href="/assets/js/85.34c10294.js"><link rel="prefetch" href="/assets/js/86.4c7d6d58.js"><link rel="prefetch" href="/assets/js/87.ade6c1ee.js"><link rel="prefetch" href="/assets/js/88.306bb690.js"><link rel="prefetch" href="/assets/js/89.ed02954c.js"><link rel="prefetch" href="/assets/js/9.b3d99320.js"><link rel="prefetch" href="/assets/js/90.8db20502.js"><link rel="prefetch" href="/assets/js/91.3d01b6a4.js"><link rel="prefetch" href="/assets/js/92.b3dcea87.js"><link rel="prefetch" href="/assets/js/93.28790aa5.js"><link rel="prefetch" href="/assets/js/94.45722d7d.js"><link rel="prefetch" href="/assets/js/95.c04b6585.js"><link rel="prefetch" href="/assets/js/96.7c4d9328.js"><link rel="prefetch" href="/assets/js/97.85bb6089.js"><link rel="prefetch" href="/assets/js/98.e22a9c08.js"><link rel="prefetch" href="/assets/js/99.fd9f1f1d.js">
    <link rel="stylesheet" href="/assets/css/0.styles.c17b3ac5.css">
  </head>
  <body class="theme-mode-light">
    <div id="app" data-server-rendered="true"><div class="theme-container sidebar-open have-rightmenu"><header class="navbar blur"><div title="目录" class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><img src="/logo/TB-mini.png" alt="Teng's blog" class="logo"> <span class="site-name can-hide">Teng's blog</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/" class="nav-link">首页</a></div><div class="nav-item"><a href="/note/java/" class="nav-link">Java</a></div><div class="nav-item"><a href="/note/font-end/" class="nav-link">H5前端</a></div> <a href="https://github.com/shetengteng" target="_blank" rel="noopener noreferrer" class="repo-link">
    GitHub
    <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav></div></header> <div class="sidebar-mask"></div> <div class="sidebar-hover-trigger"></div> <aside class="sidebar" style="display:none;"><!----> <nav class="nav-links"><div class="nav-item"><a href="/" class="nav-link">首页</a></div><div class="nav-item"><a href="/note/java/" class="nav-link">Java</a></div><div class="nav-item"><a href="/note/font-end/" class="nav-link">H5前端</a></div> <a href="https://github.com/shetengteng" target="_blank" rel="noopener noreferrer" class="repo-link">
    GitHub
    <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav>  <ul class="sidebar-links"><li><a href="/pages/f3cf88/" aria-current="page" class="active sidebar-link">简介</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/pages/f3cf88/#关于nosql" class="sidebar-link">关于NoSQL</a></li><li class="sidebar-sub-header"><a href="/pages/f3cf88/#关于mongodb" class="sidebar-link">关于MongoDB</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/pages/f3cf88/#特点" class="sidebar-link">特点</a></li><li class="sidebar-sub-header"><a href="/pages/f3cf88/#适用场景" class="sidebar-link">适用场景</a></li><li class="sidebar-sub-header"><a href="/pages/f3cf88/#不适用场景" class="sidebar-link">不适用场景</a></li></ul></li><li class="sidebar-sub-header"><a href="/pages/f3cf88/#安装-mongodb" class="sidebar-link">安装 MongoDB</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/pages/f3cf88/#使用docker安装" class="sidebar-link">使用Docker安装</a></li><li class="sidebar-sub-header"><a href="/pages/f3cf88/#桌面客户端" class="sidebar-link">桌面客户端</a></li></ul></li><li class="sidebar-sub-header"><a href="/pages/f3cf88/#mongodb-的概念解析" class="sidebar-link">MongoDB 的概念解析</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/pages/f3cf88/#数据库-database" class="sidebar-link">数据库 database</a></li><li class="sidebar-sub-header"><a href="/pages/f3cf88/#文档-document" class="sidebar-link">文档 document</a></li><li class="sidebar-sub-header"><a href="/pages/f3cf88/#集合" class="sidebar-link">集合</a></li></ul></li><li class="sidebar-sub-header"><a href="/pages/f3cf88/#数据类型" class="sidebar-link">数据类型</a></li></ul></li><li><a href="/pages/a4a537/" class="sidebar-link">常用操作</a></li><li><a href="/pages/1de785/" class="sidebar-link">与SpringBoot集成</a></li></ul> </aside> <div><main class="page"><div class="theme-vdoing-wrapper "><div class="articleInfo-wrap" data-v-0c557b5e><div class="articleInfo" data-v-0c557b5e><ul class="breadcrumbs" data-v-0c557b5e><li data-v-0c557b5e><a href="/" title="首页" class="iconfont icon-home router-link-active" data-v-0c557b5e></a></li> <li data-v-0c557b5e><a href="/note/mongodb/#Database-MongoDB" data-v-0c557b5e>Database-MongoDB</a></li></ul> <div class="info" data-v-0c557b5e><div title="作者" class="author iconfont icon-touxiang" data-v-0c557b5e><a href="https://github.com/shetengteng" target="_blank" title="作者" class="beLink" data-v-0c557b5e>Shetengteng</a></div> <div title="创建时间" class="date iconfont icon-riqi" data-v-0c557b5e><a href="javascript:;" data-v-0c557b5e>2021-12-04</a></div> <!----></div></div></div> <!----> <div class="content-wrapper"><div class="right-menu-wrapper"><div class="right-menu-margin"><div class="right-menu-content"></div></div></div> <h1><!---->简介<!----></h1>  <div class="theme-vdoing-content content__default"><h2 id="关于nosql"><a href="#关于nosql" class="header-anchor">#</a> 关于NoSQL</h2> <p>Not Only SQL</p> <ul><li>非关系型的数据库</li> <li>提倡运用非关系型的数据存储</li></ul> <p>优点</p> <ul><li>对数据库高并发读写</li> <li>对海量数据的高效率存储和访问</li> <li>对数据库的高可扩展性和高可用性</li></ul> <p>弱点</p> <ul><li>数据库事务一致性需求</li> <li>数据库的写实时性和读实时性需求</li> <li>对复杂的SQL查询，特别是多表关联查询的需求</li></ul> <h2 id="关于mongodb"><a href="#关于mongodb" class="header-anchor">#</a> 关于MongoDB</h2> <ul><li>由C++语言编写的，是一个基于分布式文件存储的开源数据库系统</li> <li>在高负载的情况下，添加更多的节点，可以保证服务器性能</li> <li>为WEB应用提供可扩展的高性能数据存储解决方案</li> <li>将数据存储为一个文档，数据结构由键值(key=&gt;value)对组成</li> <li>MongoDB 文档类似于 JSON 对象
<ul><li>字段值可以包含其他文档，数组及文档数组</li></ul></li></ul> <p><img src="/assets/img/json.d7365ff2.png" alt=""></p> <h3 id="特点"><a href="#特点" class="header-anchor">#</a> 特点</h3> <ul><li><p>MongoDB 是一个面向文档存储的数据库，操作起来比较简单和容易</p></li> <li><p>可在MongoDB记录中设置任何属性的索引</p></li> <li><p>可以通过本地或者网络创建数据镜像，这使得MongoDB有更强的扩展性</p></li> <li><p>如果负载的增加（需要更多的存储空间和更强的处理能力） ，它可以分布在计算机网络中的其他节点上这就是所谓的分片</p></li> <li><p>支持丰富的查询表达式。查询指令使用JSON形式的标记，可轻易查询文档中内嵌的对象及数组</p></li> <li><p>使用update()命令可以实现替换完成的文档（数据）或者一些指定的数据字段</p></li> <li><p>Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作</p> <ul><li>Map和Reduce</li> <li>Map函数调用emit(key,value)遍历集合中所有的记录，将key与value传给Reduce函数进行处理。</li> <li>Map函数和Reduce函数是使用Javascript编写的，并可以通过db.runCommand或mapreduce命令来执行MapReduce操作</li></ul></li> <li><p>GridFS是MongoDB中的一个内置功能，可以用于存放大量小文件</p></li> <li><p>MongoDB允许在服务端执行脚本，可以用Javascript编写某个函数，直接在服务端执行，也可以把函数的定义存储在服务端，下次直接调用即可</p></li> <li><p>MongoDB支持各种编程语言:RUBY，PYTHON，JAVA，C++，PHP，C#等多种语言</p></li></ul> <h3 id="适用场景"><a href="#适用场景" class="header-anchor">#</a> 适用场景</h3> <p>网站数据</p> <ul><li>Mongo非常适合实时的插入，更新与查询，并具备网站实时数据存储所需的复制及高度伸缩性</li></ul> <p>缓存</p> <ul><li>由于性能很高，Mongo也适合作为信息基础设施的缓存层</li> <li>在系统重启之后，由Mongo搭建的持久化缓存层可以避免下层的数据源过载</li></ul> <p>大尺寸，低价值的数据</p> <ul><li>使用传统的关系型数据库存储一些数据时可能会比较昂贵， 在此之前，很多时候程序员往往会选择传统的文件进行存储</li></ul> <p>高伸缩性的场景</p> <ul><li>Mongo非常适合由数十或数百台服务器组成的数据库</li> <li>Mongo包含对Map/Reduce的内置支持</li></ul> <p>用于对象及 JSON数据的存储</p> <ul><li>Mongo的BSON数据格式非常适合文档化格式的存储及查询</li></ul> <h3 id="不适用场景"><a href="#不适用场景" class="header-anchor">#</a> 不适用场景</h3> <p>高度事务性的系统</p> <ul><li>如银行或会计系统</li> <li>传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序</li></ul> <p>传统的商业智能应用</p> <ul><li>针对特定问题的BI数据库会对产生高度优化的查询方式</li> <li>对于此类应用，数据仓库可能是更合适的选择</li></ul> <h2 id="安装-mongodb"><a href="#安装-mongodb" class="header-anchor">#</a> 安装 MongoDB</h2> <h3 id="使用docker安装"><a href="#使用docker安装" class="header-anchor">#</a> 使用Docker安装</h3> <div class="language-shell line-numbers-mode"><pre class="language-shell"><code><span class="token comment">#拉取镜像 </span>
<span class="token function">docker</span> pull mongo:latest

<span class="token comment">#创建和启动容器 在windows下，数据挂载在d盘 D:\dev\docker-volumes\mongodb\data\db</span>
<span class="token function">docker</span> run -d --restart<span class="token operator">=</span>always -p <span class="token number">27017</span>:27017 --name my-mongo -v /d/dev/docker-volumes/mongodb/data/db:/data/db -d mongo


<span class="token comment">#进入容器 </span>
<span class="token function">docker</span> <span class="token builtin class-name">exec</span> -it my-mongo/bin/bash 

<span class="token comment">#使用MongoDB客户端进行操作 </span>
mongo 

<span class="token operator">&gt;</span> show dbs <span class="token comment">#查询所有的数据库 </span>
admin <span class="token number">0</span>.000GB 
config <span class="token number">0</span>.000GB 
<span class="token builtin class-name">local</span> <span class="token number">0</span>.000GB 
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br></div></div><h3 id="桌面客户端"><a href="#桌面客户端" class="header-anchor">#</a> 桌面客户端</h3> <p>https://www.mongobooster.com/downloads</p> <h2 id="mongodb-的概念解析"><a href="#mongodb-的概念解析" class="header-anchor">#</a> MongoDB 的概念解析</h2> <table><thead><tr><th>SQL术语/概念</th> <th>MongoDB术语/概念</th> <th>解释/说明</th></tr></thead> <tbody><tr><td>database</td> <td>database</td> <td>数据库</td></tr> <tr><td>table</td> <td>collection</td> <td>数据库表/集合</td></tr> <tr><td>row</td> <td>document</td> <td>数据记录行/文档</td></tr> <tr><td>column</td> <td>field</td> <td>数据字段/域</td></tr> <tr><td>index</td> <td>index</td> <td>索引</td></tr> <tr><td>table joins</td> <td></td> <td>表连接,MongoDB不支持</td></tr> <tr><td>primary key</td> <td>primary key</td> <td>主键,MongoDB自动将_id字段设置为主键</td></tr></tbody></table> <p><img src="/assets/img/mongodbData.f4ea8201.png" alt=""></p> <h3 id="数据库-database"><a href="#数据库-database" class="header-anchor">#</a> 数据库 database</h3> <blockquote><p>一个mongodb中可以建立多个数据库，常用命令如下</p></blockquote> <h4 id="help"><a href="#help" class="header-anchor">#</a> help</h4> <p>Help查看命令提示</p> <div class="language-js line-numbers-mode"><pre class="language-js"><code>db<span class="token punctuation">.</span><span class="token function">help</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h4 id="use"><a href="#use" class="header-anchor">#</a> use</h4> <p>切换/创建数据库，如果数据库不存在，则创建数据库，否则切换到指定数据库</p> <div class="language-js line-numbers-mode"><pre class="language-js"><code>use test
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h4 id="show"><a href="#show" class="header-anchor">#</a> show</h4> <p>查询所有数据库</p> <div class="language-js line-numbers-mode"><pre class="language-js"><code>show dbs<span class="token punctuation">;</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h4 id="dropdatabase"><a href="#dropdatabase" class="header-anchor">#</a> dropDatabase</h4> <p>删除当前使用数据库</p> <div class="language-js line-numbers-mode"><pre class="language-js"><code>db<span class="token punctuation">.</span><span class="token function">dropDatabase</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h4 id="getname"><a href="#getname" class="header-anchor">#</a> getName</h4> <p>查看当前使用的数据库</p> <div class="language-js line-numbers-mode"><pre class="language-js"><code>db<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h4 id="stats"><a href="#stats" class="header-anchor">#</a> stats</h4> <p>显示当前db状态</p> <div class="language-js line-numbers-mode"><pre class="language-js"><code>db<span class="token punctuation">.</span><span class="token function">stats</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h4 id="version"><a href="#version" class="header-anchor">#</a> version</h4> <p>当前db版本</p> <div class="language-js line-numbers-mode"><pre class="language-js"><code>db<span class="token punctuation">.</span><span class="token function">version</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h4 id="getmongo"><a href="#getmongo" class="header-anchor">#</a> getMongo</h4> <p>查看当前db的链接机器地址</p> <div class="language-js line-numbers-mode"><pre class="language-js"><code>db<span class="token punctuation">.</span>getMongo〇<span class="token punctuation">;</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h3 id="文档-document"><a href="#文档-document" class="header-anchor">#</a> 文档 document</h3> <p>文档是一组键值 (key-value) 对 (即BSON)
MongoDB 的文档不需要设置相同的字段，并且相同的字段<strong>不需要相同的数据类型</strong>，这与关系型数据库有很大的区别</p> <p>下表列出了 RDBMS 与 MongoDB 对应的术语</p> <table><thead><tr><th>RDBMS</th> <th>MongoDB</th></tr></thead> <tbody><tr><td>数据库</td> <td>数据库</td></tr> <tr><td>表格</td> <td>集合</td></tr> <tr><td>行</td> <td>文档</td></tr> <tr><td>列</td> <td>字段</td></tr> <tr><td>表联合</td> <td>嵌入文档</td></tr> <tr><td>主键</td> <td>主键 (MongoDB 提供了  key 为 _id )</td></tr></tbody></table> <p>注意</p> <ul><li>文档中的键/值对是有序的</li> <li>文档中的值不仅可以是在双引号里面的字符串，还可以是其他几种数据类型（甚至可以是整个嵌入的文档)</li> <li>MongoDB区分类型和大小写</li> <li>MongoDB的文档不能有重复的键</li> <li>文档的键是字符串，除了少数例外情况，键可以使用任意UTF-8字符</li></ul> <h4 id="文档键命名规范"><a href="#文档键命名规范" class="header-anchor">#</a> 文档键命名规范</h4> <ul><li>键不能含有\0 (空字符)
<ul><li>这个字符用来表示键的结尾</li></ul></li> <li>和$有特别的意义，只有在特定环境下才能使用</li> <li>以下划线 <code>_</code>开头的键是保留的(不是严格要求的)</li></ul> <h3 id="集合"><a href="#集合" class="header-anchor">#</a> 集合</h3> <ul><li>集合就是 MongoDB 文档组，类似于 RDBMS （关系数据库管理系统：Relational Database Management System)中的表格</li> <li>集合存在于数据库中，集合没有固定的结构，在对集合可以插入不同格式和类型的数据，通常情况下插入集合的数据都会有一定的关联性</li></ul> <h4 id="createcollection"><a href="#createcollection" class="header-anchor">#</a> createCollection</h4> <p>创建一个集合（table)</p> <div class="language-js line-numbers-mode"><pre class="language-js"><code>db<span class="token punctuation">.</span><span class="token function">createCollection</span><span class="token punctuation">(</span> <span class="token string">&quot;collName&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h4 id="getcollection"><a href="#getcollection" class="header-anchor">#</a> getCollection</h4> <p>得到指定名称的集合（table )</p> <div class="language-js line-numbers-mode"><pre class="language-js"><code>db<span class="token punctuation">.</span><span class="token function">getCollection</span><span class="token punctuation">(</span><span class="token string">&quot;user&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h2 id="数据类型"><a href="#数据类型" class="header-anchor">#</a> 数据类型</h2> <table><thead><tr><th>数据类型</th> <th>描述</th></tr></thead> <tbody><tr><td>String</td> <td>字符串<br>存储数据常用的数据类型。在 MongoDB 中，UTF-8 编码的字符串才是合法的</td></tr> <tr><td>Integer</td> <td>整型数值<br>用于存储数值。根据你所采用的服务器，可分为 32 位或 64 位</td></tr> <tr><td>Boolean</td> <td>布尔值<br>用于存储布尔值（真/假）</td></tr> <tr><td>Double</td> <td>双精度浮点值。用于存储浮点值</td></tr> <tr><td>Min/Max keys</td> <td>将一个值与 BSON（二进制的  JSON）元素的最低值和最高值相对比</td></tr> <tr><td>Arrays</td> <td>用于将数组或列表或多个值存储为一个键</td></tr> <tr><td>Timestamp</td> <td>时间戳。记录文档修改或添加的具体时间</td></tr> <tr><td>Object</td> <td>用于内嵌文档</td></tr> <tr><td>Null</td> <td>用于创建空值</td></tr> <tr><td>Symbol</td> <td>符号<br>该数据类型基本上等同于字符串类型，但不同的是，它一般用于采用特殊符号类型的语言</td></tr> <tr><td>Date</td> <td>日期时间<br>用UNIX 时间格式来存储当前日期或时间<br>可指定自己的日期时间：创建 Date 对象，传入年月日信息</td></tr> <tr><td>Object ID</td> <td>对象 ID。用于创建文档的  ID</td></tr> <tr><td>Binary Data</td> <td>二进制数据<br>用于存储二进制数据</td></tr> <tr><td>Code</td> <td>代码类型<br>用于在文档中存储 JavaScript 代码</td></tr> <tr><td>Regular expression</td> <td>正则表达式类型<br>用于存储正则表达式</td></tr></tbody></table></div></div>  <div class="page-edit"><!----> <!----> <div class="last-updated"><span class="prefix">Last Updated:</span> <span class="time">2022/01/16, 11:29:51</span></div></div> <div class="page-nav-wapper"><div class="page-nav-centre-wrap"><!----> <a href="/pages/a4a537/" class="page-nav-centre page-nav-centre-next"><div class="tooltip">常用操作</div></a></div> <div class="page-nav"><p class="inner"><!----> <span class="next"><a href="/pages/a4a537/">常用操作</a>→
      </span></p></div></div></div> <!----></main></div> <div class="footer"><div class="icons"><a href="mailto:work_stt@163.com" title="email" target="_blank" class="iconfont icon-youjian"></a><a href="https://github.com/shetengteng" title="GitHub" target="_blank" class="iconfont icon-github"></a></div> 
  Theme by
  <a href="https://github.com/xugaoyi/vuepress-theme-vdoing" target="_blank" title="本站主题">Vdoing</a> 
    | Copyright © 2021-2022
    <span>Shetengteng | MIT License</span></div> <div class="buttons"><div title="返回顶部" class="button blur go-to-top iconfont icon-fanhuidingbu" style="display:none;"></div> <div title="去评论" class="button blur go-to-comment iconfont icon-pinglun" style="display:none;"></div> <div title="主题模式" class="button blur theme-mode-but iconfont icon-zhuti"><ul class="select-box" style="display:none;"><li class="iconfont icon-zidong">
          跟随系统
        </li><li class="iconfont icon-rijianmoshi">
          浅色模式
        </li><li class="iconfont icon-yejianmoshi">
          深色模式
        </li><li class="iconfont icon-yuedu">
          阅读模式
        </li></ul></div></div> <!----> <!----> <!----></div><div class="global-ui"><div></div></div></div>
    <script src="/assets/js/app.ab6a7ec7.js" defer></script><script src="/assets/js/2.bc9beebf.js" defer></script><script src="/assets/js/47.59030139.js" defer></script>
  </body>
</html>
